// 引入vuex
import Vuex from 'vuex'
import Vue from 'vue'
import getters from './getters'
import mutations from './mutations'
// 使用中间件
Vue.use(Vuex)
// 实例化一个store
const store = new Vuex.Store({
  // 初始化数据，类似data
  state: {
    num: 100,
    goodsList: [
      { name: "iphone", num: 5, price: 5999 },
      { name: "huawei", num: 15, price: 6999 },
      { name: "xiaomi", num: 10, price: 5899 },
      { name: "vivo", num: 12, price: 4599 },
    ],
  },
  // vuex的计算属性。区别1：名字不同；区别2：需要传参
  getters,
  // 修改数据的唯一方式。相当于methods
  mutations,
  // 异步修改数据的方式，相当于methods.真正修改数据还是需要mutations
  // this.$store.dispatch('actionName')
  actions: {
    // 获取积分
    async getPoint ({ commit }) {
      commit('gotData', await getPointData())
    },
    // 获取等级
    async getLevel ({ dispatch, commit }) {
      await dispatch('getPoint') // 等待 getPoint 完成
      commit('gotOtherData', await getLevelData())
    }
  },
  modules: {
    // 模块拆分
    boy: {
      state: {
        name: 'Tom'
      }
    },
    gril: {
      state: {
        name: 'Jane'
      }
    }

  }
})

export default store